package io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 言初
 * Date: 2024-01-12
 * Time: 23:24
 */
public class ioDemo6 {
    // InputStream （字节流）的使用方法：

    public static void main1(String[] args) throws IOException {
        // 这个过程相当于是C 语言中的fopen操作，相当于文件的打开操作~
        InputStream inputStream=new FileInputStream("e:/test.txt");
        // InputStream是一个抽象类，不能直接实例化，所以我们去new它的子类。
        // FileInputStream 就是 InputStream 的一个子类
        // FileInputStream 中的路径：可以是一个绝对路径，可以是一个相对路径，也可以是File对象。

        //  但是这样来关闭文件也可能会遇到一些问题，如果在代码执行过程中，出现的return，或者抛异常的情况，
        //  那么就无法执行到文件关闭的代码，就无法关闭文件了。
        // 因此有其他的更好的方式来完成这个文件关闭的过程，使用try 操作。

        // 文件的关闭操作
        inputStream.close();
    }

    public static void main(String[] args) throws IOException {
        // 这种写法：当try内的代码执行完毕之后，会自动的执行 close 操作。
        try(InputStream inputStream=new FileInputStream("e:/test.txt")){
            // 读文件
            while(true){
                // 无参数版本的 read ，一次只能读一个字节（byte），返回值是int类型，返回是0到255，
                // 如果返回了-1，就代表文件读取结束了。
                int b= inputStream.read();
                if(b==-1){
                    // 读到文件末尾了
                    break;
                }
                // System.out.println(b); // 现在打印出来的是每个字节对应的ASCII码值。（现在是字节流的读取）
                System.out.printf("%x\n",b); // 以十六进制的形式进行打印（现在是字节流的读取）
            }

        }
    }
}
